1
Tham lam so với Lười biếng: Những lựa chọn chiến lược trong xử lý bộ sưu tập
AI019Lesson 5
00:00

Trong Elixir, việc xử lý dữ liệu tuân theo hai triết lý khác biệt: Tham lam (Nhanh nhảy) và Lười biếng. Việc hiểu rõ sự đánh đổi này là điều then chốt để tối ưu hóa hiệu suất bộ nhớ và độ ổn định hệ thống.

1. Giao thức Enumerable

Về mặt kỹ thuật, những thứ có thể duyệt qua được gọi là đã triển khai giao thức Enumerable. Giao thức chung này cho phép các cấu trúc dữ liệu khác nhau hoạt động với cùng một tập hợp hàm.

2. Các module Tham lam so với Lười biếng

Module Enumtham lam. Nó có thể tiêu thụ toàn bộ nội dung của một bộ sưu tập ngay lập tức, tạo ra các danh sách trung gian tại mỗi bước trong luồng xử lý. Ngược lại, module Streamlười biếng. Giá trị tiếp theo chỉ được tính toán khi chỉ khi nó thực sự cần thiết.

Enum (Tham lam)Tải toàn bộ tệp 10GB→ Sập (Hết bộ nhớ)Stream (Lười biếng)Đọc từng dòng một→ An toàn & Có thể ghép nối

3. Mô tả so với Kết quả

Một giá trị Stream là một mô tả về những gì chúng ta muốn, chứ không phải kết quả thực tế. Các Stream có thể duyệt và ghép nối, cho phép bạn áp dụng nhiều thao tác chuyển đổi mà không thực thi công việc nào cho đến khi bạn truyền Stream vào một 'cửa xả' nhanh nhảy như Enum.to_list/1.

4. Tính thuần khiết của mô hình

Việc pha trộn các mô hình (chức năng và hướng đối tượng) sẽ làm giảm đi những lợi ích mà cách tiếp cận chức năng mang lại. Hãy ưu tiên các thao tác mô tả (declarative) hơn là các vòng lặp mệnh lệnh (imperative) để đảm bảo tính dự đoán được.

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>